package com.ruoyi.framework.web.service;


import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

@Service
public class OnlineUserService {


    // 使用ConcurrentMap存储在线用户信息
    private static final ConcurrentMap<Integer, Long> onlineUsers = new ConcurrentHashMap<>();

    // 用户登录时调用
    public boolean userLogin(Integer userId) {
        onlineUsers.put(userId, System.currentTimeMillis());
return true;
    }

    // 用户退出时调用
    public boolean userLogout(Integer userId) {
        onlineUsers.remove(userId);
        return true;

    }

    // 检查用户是否在线
    public boolean isUserOnline(Integer userId) {
        System.out.println(onlineUsers);
        if (!onlineUsers.containsKey(userId)) return false;

        // 检查用户最后活动时间（5分钟内视为在线）
//        long lastActiveTime = onlineUsers.get(userId);
//        return (System.currentTimeMillis() - lastActiveTime) < 5 * 60 * 1000;
        return true;
    }

    // 更新用户最后活动时间
    public void updateUserActivity(Integer userId) {
        if (onlineUsers.containsKey(userId)) {
            onlineUsers.put(userId, System.currentTimeMillis());
        }
    }

    // 获取所有在线用户ID
    public List<Integer> getOnlineUserIds() {
        // 先清理超时用户
        cleanInactiveUsers();
        return new ArrayList<>(onlineUsers.keySet());
    }

    // 清理超时用户（每5分钟执行一次）
    @Scheduled(fixedRate = 300000)
    public void cleanInactiveUsers() {
        long currentTime = System.currentTimeMillis();
        onlineUsers.entrySet().removeIf(entry ->
                (currentTime - entry.getValue()) > 5 * 60 * 1000
        );
    }
}
